// 地址 1111111111111111111111
const db = uniCloud.database()
const addressCollection = db.collection('address')
const _ = db.command

module.exports = {
	/**
	 * 获取当前用户的所有地址
	 * @param {Object} [options] - 可选参数
	 * @param {number} [options.page=1] - 页码
	 * @param {number} [options.size=10] - 每页条数
	 * @returns {Object} 地址列表及分页信息
	 */
	async getAll(options = {}) {
		const {
			page = 1, size = 10, uid
		} = options
		const skip = (page - 1) * size

		// 查询当前用户的地址，按创建时间倒序（最新的在前）
		const res = await addressCollection
			.where({
				uid: uid
			})
			.orderBy('create_date', 'desc')
			.skip(skip)
			.limit(size)
			.get()

		// 获取总条数（用于分页）
		const countRes = await addressCollection
			.where({
				uid: uid
			})
			.count()

		return {
			success: true,
			list: res.data, // 地址列表
			total: countRes.total, // 总条数
			page, // 当前页码
			size, // 每页条数
			pages: Math.ceil(countRes.total / size) // 总页数
		}
	},
	/**
	 * 获取当前用户的默认地址
	 * @returns {Object} 默认地址信息（若不存在则返回null）
	 */
	async getDefault(options = {}) {
		const {
			uid
		} = options
		const res = await addressCollection
			.where({
				uid: uid,
				is_default: true
			})
			.get()

		return {
			success: true,
			defaultAddress: res.data.length > 0 ? res.data[0] : null
		}
	},

	/**
	 * 新增地址
	 * @param {Object} addressInfo - 地址信息
	 * @param {string} addressInfo.name - 收件人姓名
	 * @param {string} addressInfo.mobile - 联系电话
	 * @param {array} addressInfo.area - 所在区域 [{text, value}, ...]
	 * @param {string} addressInfo.address - 详细地址
	 * @param {boolean} [addressInfo.is_default=false] - 是否设为默认地址
	 * @returns {Object} 新增结果
	 */
	async add(addressInfo) {
		// 验证必填字段
		if (!addressInfo.name || !addressInfo.mobile || !addressInfo.area || !addressInfo.address) {
			throw new Error('请填写完整的地址信息')
		}

		// 手机号验证
		const mobileReg = /^1[3-9]\d{9}$/
		if (!mobileReg.test(addressInfo.mobile)) {
			throw new Error('请输入正确的手机号码')
		}

		// 如果设为默认地址，先取消当前用户其他默认地址
		if (addressInfo.is_default) {
			await addressCollection.where({
				uid: addressInfo.uid,
				is_default: true
			}).update({
				is_default: false
			})
		}

		// 插入的数据
		const data = {
			uid: addressInfo.uid,
			classes: addressInfo.classes,
			name: addressInfo.name,
			mobile: addressInfo.mobile,
			area: addressInfo.area,
			address: addressInfo.address,
			is_default: addressInfo.is_default || false,
			create_date: new Date()
		}

		// 插入数据
		const res = await addressCollection.add(data)

		return {
			success: true,
			message: '地址添加成功',
			addressId: res.id
		}
	},

	/**
	 * 修改地址
	 * @param {string} addressId - 地址ID
	 * @param {Object} addressInfo - 要修改的地址信息
	 * @returns {Object} 修改结果
	 */
	async update(addressInfo) {
		if (!addressInfo._id) {
			throw new Error('地址ID不能为空')
		}

		// 验证地址是否存在且属于当前用户
		const address = await addressCollection.where({
			_id: addressInfo._id,
			uid: addressInfo.uid
		}).get()

		if (address.data.length === 0) {
			throw new Error('地址不存在或无权修改')
		}

		// 如果设为默认地址，先取消当前用户其他默认地址
		// if (addressInfo.is_default) {
		// 	await addressCollection.where({
		// 		uid: addressInfo.uid,
		// 		is_default: true,
		// 		_id: _.neq(addressInfo._id) // 排除当前地址
		// 	}).update({
		// 		is_default: false
		// 	})
		// }

		// 准备更新数据（过滤掉undefined的字段）
		const updateData = {}
		if (addressInfo.name !== undefined) updateData.name = addressInfo.name
		if (addressInfo.classes !== undefined) updateData.classes = addressInfo.classes
		if (addressInfo.mobile !== undefined) updateData.mobile = addressInfo.mobile
		if (addressInfo.area !== undefined) updateData.area = addressInfo.area
		if (addressInfo.address !== undefined) updateData.address = addressInfo.address
		if (addressInfo.is_default !== undefined) updateData.is_default = addressInfo.is_default

		// 执行更新
		const res = await addressCollection.where({
			_id: addressInfo._id,
			uid: addressInfo.uid
		}).update(updateData)

		return {
			success: res.updated > 0,
			message: res.updated > 0 ? '地址更新成功' : '地址未修改',
			updated: res.updated
		}
	},

	/**
	 * 删除地址
	 * @param {string} addressId - 地址ID
	 * @returns {Object} 删除结果
	 */
	async delete(uid,addressId) {
		if (!addressId) {
			throw new Error('地址ID不能为空')
		}

		// 验证地址是否存在且属于当前用户
		const address = await addressCollection.where({
			_id: addressId,
			uid: uid
		}).get()

		if (address.data.length === 0) {
			throw new Error('地址不存在或无权删除')
		}

		// 执行删除
		const res = await addressCollection.where({
			_id: addressId,
			uid: uid
		}).remove()

		return {
			success: res.deleted > 0,
			message: res.deleted > 0 ? '地址删除成功' : '地址删除失败',
			deleted: res.deleted
		}
	}
}